package controllers

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
	"main.go/Calculate"
	"main.go/database"
	"main.go/model"
	"net/http"
	"strconv"
)

//查找
func Find_out_house(db *gorm.DB, request model.Out_house) bool {
	var out_house model.Out_house
	db.Where("out_house_id = ?", request.Out_house_id).First(&out_house)
	if out_house.Out_house_id != "" {
		fmt.Println("查找成功")
		return true
	}
	fmt.Println("查找失败")
	return false
}

//插入
func Insert_out_house(db *gorm.DB, request model.Out_house) bool {

	db.Create(&request) //创建一个元组

	fmt.Println("插入成功")
	return true
}

//删除
func Delete_out_house(db *gorm.DB, request model.Out_house) bool {
	if Find_out_house(db, request) == false {
		fmt.Println("不存在该出库表，无法删除")
		return false
	}
	db.Where("out_house_id = ? AND out_house_time = ?", request.Out_house_id, request.Out_house_time).Delete(&request)
	fmt.Println("删除成功")
	return true
}

//更新
func Update_out_house(db *gorm.DB, request model.Out_house) bool {
	if Find_out_house(db, request) == false {
		fmt.Println("无该出库表，无法更新")
		return false
	}
	db.Model(&request).Where("out_house_id = ?", request.Out_house_id).Save(
		model.Out_house{
			Out_house_id:       request.Out_house_id,
			Out_house_house_id: request.Out_house_house_id,
			Out_house_time:     request.Out_house_time,
			Out_house_car:      request.Out_house_car,
			Out_house_count:    request.Out_house_count,
			Out_house_tun:      request.Out_house_tun,
			Out_house_cost:     request.Out_house_cost,
		},
	)
	fmt.Println("更新成功")
	return true
}
func Web_show_out_house(c *gin.Context) {
	db := database.GetDB()
	var out_house []model.Out_house
	result := db.Table("out_houses").Find(&out_house)
	if result != nil {
		fmt.Println("!!")
	}
	fmt.Println(out_house)
	c.JSON(http.StatusOK, gin.H{ //多传一些参数 可能会用到
		"code":      "200",
		"out_house": out_house, //试试传一个列表
		"msg":       "成功",
	})
}

func Web_get_out_house(c *gin.Context) {
	db := database.GetDB()
	var out_house1 model.Out_house
	var out_house2 []model.Out_house
	request := make(map[string]interface{})
	c.ShouldBind(&request)
	fmt.Println(request)
	out_house1.Out_house_id = request["out_house_id"].(string)
	db.Where("out_house_id = ?", out_house1.Out_house_id).Find(&out_house2)
	if out_house2[0].Out_house_id != "" {
		fmt.Println("成功查找到出库表")
		c.JSON(200, gin.H{
			"code":      "200",
			"out_house": out_house2, //传一个对象
			"msg":       "成功",
		})
	} else {
		c.JSON(404, gin.H{
			"code":      "404",
			"out_house": out_house2, //传一个空对象
			"msg":       "no",
		})
		fmt.Println("未找到该入库表")
	}
}
func Web_add_out_house(c *gin.Context) {
	db := database.GetDB()
	var out_house model.Out_house
	request := make(map[string]interface{})
	c.ShouldBind(&request)
	out_house.Out_house_id = request["out_house_id"].(string)
	out_house.Out_house_house_id = request["out_house_house_id"].(string)
	out_house.Out_house_time = request["out_house_time"].(string)
	out_house.Out_house_car = request["out_house_car"].(string)
	out_house.Out_house_count, _ = strconv.Atoi(request["out_house_count"].(string))
	out_house.Out_house_tun, _ = strconv.Atoi(request["out_house_tun"].(string))
	cost := Calculate.Calculate(db, out_house)
	out_house.Out_house_cost = cost

	var in_house model.In_house
	db.Where("in_house_id = ? AND in_house_house_id = ?", out_house.Out_house_id, out_house.Out_house_house_id).First(&in_house)

	in_house.In_house_count = in_house.In_house_count - out_house.Out_house_count
	in_house.In_house_tun = in_house.In_house_tun - out_house.Out_house_tun

	Update_in_house(db, in_house)

	var goods_company model.Goods_company
	var house model.House
	db.Where("house_id = ?", out_house.Out_house_house_id).First(&house)
	db.Where("goods_company_name = ?", house.House_goods_company).First(&goods_company)
	goods_company.Goods_company_charge = goods_company.Goods_company_charge + cost
	Update_goods_company(db, goods_company)
	fmt.Println(request)
	if Insert_out_house(db, out_house) {
		c.JSON(200, gin.H{
			"code": "200",
			"msg":  "成功",
		})
		fmt.Println("添加成功")
	} else {
		c.JSON(404, gin.H{
			"code": "404",
			"msg":  "添加失败",
		})
		fmt.Println("添加失败")
	}
}
func Web_delete_out_house(c *gin.Context) {
	db := database.GetDB()
	var out_house model.Out_house
	request := make(map[string]interface{})
	c.ShouldBind(&request)
	fmt.Println(request)
	out_house.Out_house_id = request["out_house_id"].(string)

	var test model.Out_house
	db.Where("out_house_id = ? ", out_house.Out_house_id).First(&test)
	var in_house model.In_house
	db.Where("in_house_id = ?", out_house.Out_house_id).First(&in_house)
	in_house.In_house_count = in_house.In_house_count + test.Out_house_count
	in_house.In_house_tun = in_house.In_house_tun + test.Out_house_tun
	Update_in_house(db, in_house)

	var goods_company model.Goods_company
	var house model.House
	db.Where("house_id = ?", test.Out_house_house_id).First(&house)
	db.Where("goods_company_name = ?", house.House_goods_company).First(&goods_company)
	Update_goods_company(db, goods_company)

	if Delete_out_house(db, out_house) {
		c.JSON(200, gin.H{
			"code": "200",
			"msg":  "删除成功",
		})
		fmt.Println("删除成功")
	} else {
		c.JSON(404, gin.H{
			"code": "404",
			"msg":  "删除失败",
		})
		fmt.Println("删除失败")
	}
}
func Web_update_out_house(c *gin.Context) {
	db := database.GetDB()
	var out_house model.Out_house
	request := make(map[string]interface{})
	c.ShouldBind(&request)
	fmt.Println(request)
	out_house.Out_house_id = request["out_house_id"].(string)
	out_house.Out_house_house_id = request["out_house_house_id"].(string)
	out_house.Out_house_time = request["out_house_time"].(string)
	out_house.Out_house_car = request["out_house_car"].(string)
	out_house.Out_house_count, _ = strconv.Atoi(request["out_house_count"].(string))
	out_house.Out_house_tun, _ = strconv.Atoi(request["out_house_tun"].(string))
	cost := Calculate.Calculate(db, out_house)
	out_house.Out_house_cost = cost
	var test model.Out_house
	var in_house model.In_house
	db.Where("in_house_id = ? AND in_house_house_id = ?", out_house.Out_house_id, out_house.Out_house_house_id).First(&in_house)
	db.Where("out_house_id = ? AND out_house_house_id = ?", out_house.Out_house_id, out_house.Out_house_house_id).First(&test)
	in_house.In_house_count = in_house.In_house_count + test.Out_house_count - out_house.Out_house_count
	in_house.In_house_tun = in_house.In_house_tun + test.Out_house_tun - out_house.Out_house_tun
	Update_in_house(db, in_house)

	var goods_company model.Goods_company
	var house model.House
	db.Where("house_id = ?", out_house.Out_house_house_id).First(&house)
	db.Where("goods_company_name = ?", house.House_goods_company).First(&goods_company)
	goods_company.Goods_company_charge = goods_company.Goods_company_charge - test.Out_house_cost + cost
	Update_goods_company(db, goods_company)
	if Update_out_house(db, out_house) {
		c.JSON(200, gin.H{
			"code": "200",
			"msg":  "更新成功",
		})
		fmt.Println("更新成功")
	} else {
		c.JSON(404, gin.H{
			"code": "404",
			"msg":  "更新失败",
		})
		fmt.Println("更新失败")
	}
}
